package com.yntx.usercenter.authentication.service;

import com.nimbusds.jose.JOSEException;
import com.yntx.usercenter.authentication.dto.JwtPayloadDto;

import java.text.ParseException;
import java.util.List;

/**
 * jwt令牌服务
 *
 * @author jielihaofeng
 * @date 2023-04-26 12:46
 */
public interface TokenService {

    /**
     * 生成令牌
     *
     * @param jwtPayloadDto 有效载荷str
     * @return {@link String}
     * @throws Exception 异常
     */
    String generateToken(JwtPayloadDto jwtPayloadDto) throws JOSEException;

    /**
     * 生成令牌
     *
     * @param secret     秘密
     * @param payloadStr 有效载荷str
     * @return {@link String}
     * @throws Exception 异常
     */
    String generateToken(String payloadStr, String secret) throws JOSEException;

    /**
     * 验证令牌
     *
     * @param token 令牌
     * @return {@link JwtPayloadDto}
     * @throws JOSEException  joseexception
     * @throws ParseException 解析异常
     */
    JwtPayloadDto verifyToken(String token) throws JOSEException, ParseException;

    /**
     * 验证令牌
     *
     * @param token  令牌
     * @param secret 秘密
     * @return {@link JwtPayloadDto}
     * @throws JOSEException  joseexception
     * @throws ParseException 解析异常
     */
    JwtPayloadDto verifyToken(String token, String secret) throws JOSEException, ParseException;


    /**
     * 得到默认jwt载荷dto
     * 默认载荷
     *
     * @param username    用户名
     * @param tenantId    租户ID
     * @param authorities 权限
     * @param systemId    系统标识
     * @return {@link JwtPayloadDto}
     */
    JwtPayloadDto getDefaultJwtPayloadDto(String username, String tenantId, Long systemId, List<String> authorities);
}
